{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "NYgS-FIzhkLT"
      },
      "source": [
        "# **模式识别 2025 - Practice 0**\n",
        "\n",
        "完成方法：\n",
        "根据问题要求，在注释语句\n",
        "\n",
        "\\# STUDENT TODO START:\n",
        "\n",
        "\\# STUDENT TODO END\n",
        "    \n",
        "间填入适当代码"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KxzqsGeyrmRG"
      },
      "source": [
        "## ** Python 库简介**\n",
        "\n",
        "3个与数据操作相关的库: numpy, pandas 和 matplotlib."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "3fabi-gZs-Bp"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import math"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "jFJomUFuH0UV"
      },
      "source": [
        "## Numpy\n",
        "\n",
        "`numpy` 用于对数列(array)的操作. 我们可以将Python中的 list 类型转换为 array。也可以使用其它库，如 `sklearn`"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qQnWfo_vILPj"
      },
      "source": [
        "**问题 1a:** 在下列任务中我们将使用 np.array() 函数， 输入 list 类型，返回一个 array 类型. 下列函数输入一个正整数 n, 返回 $[e^0 = 1, e^1 = e,..., e^n]$."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "-sc00FC6JUr-"
      },
      "outputs": [],
      "source": [
        "def exps_up_to_n(n : int):\n",
        "    '''\n",
        "    inputs: a number n.\n",
        "    outputs: a numpy array X with shape (n + 1), such that for all i between 0 and n (inclusive), X[i] = e^i.\n",
        "    Useful functions are math.exp and range'''\n",
        "    # STUDENT TODO START:\n",
        "    result = []\n",
        "    for i in range(n + 1):\n",
        "        result.append(math.exp(i))\n",
        "    return np.array(result)\n",
        "    # STUDENT TODO END"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "30aCXSNpipyV"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,\n",
              "       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,\n",
              "       2.98095799e+03, 8.10308393e+03, 2.20264658e+04])"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "exps_up_to_n(10)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kgWtUx18U3s2"
      },
      "source": [
        "**问题 1b:** 求一个 numpy 数组的均值和标准差"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "zib-0POKVYPM"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "\n",
        "def mean_standard_dev_tuple_from_xs(xs : np.array):\n",
        "    '''\n",
        "    inputs: a numpy array xs\n",
        "    outputs: a tuple (mu, sigma), where mu is the mean of xs, and sigma is the standard deviation of xs.\n",
        "    '''\n",
        "    # STUDENT TODO START:\n",
        "    mu = np.mean(xs)\n",
        "    sigma = np.std(xs)\n",
        "    print(f\"均值(mu): {mu}, 标准差(sigma): {sigma}\")\n",
        "    return (mu, sigma)\n",
        "    # STUDENT TODO END"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7FL_ZjHKKBd2"
      },
      "source": [
        "## Pandas\n",
        "另一种组织代码的常用方法是使用 Pandas 库。 Pandas 将数据表示为 DataFrames 和 Series，其中 Series 是数据向量，DataFrames 表示 Series 的标记集。 可以使用 seaborn 库提供示例数据集。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 423
        },
        "id": "t66VqXMkKmz-",
        "outputId": "e6c4ba91-665d-4484-8ee0-16549dc10ddd"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sepal_length</th>\n",
              "      <th>sepal_width</th>\n",
              "      <th>petal_length</th>\n",
              "      <th>petal_width</th>\n",
              "      <th>species</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>4.9</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>4.7</td>\n",
              "      <td>3.2</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4.6</td>\n",
              "      <td>3.1</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.6</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>145</th>\n",
              "      <td>6.7</td>\n",
              "      <td>3.0</td>\n",
              "      <td>5.2</td>\n",
              "      <td>2.3</td>\n",
              "      <td>virginica</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>146</th>\n",
              "      <td>6.3</td>\n",
              "      <td>2.5</td>\n",
              "      <td>5.0</td>\n",
              "      <td>1.9</td>\n",
              "      <td>virginica</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>147</th>\n",
              "      <td>6.5</td>\n",
              "      <td>3.0</td>\n",
              "      <td>5.2</td>\n",
              "      <td>2.0</td>\n",
              "      <td>virginica</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>148</th>\n",
              "      <td>6.2</td>\n",
              "      <td>3.4</td>\n",
              "      <td>5.4</td>\n",
              "      <td>2.3</td>\n",
              "      <td>virginica</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>149</th>\n",
              "      <td>5.9</td>\n",
              "      <td>3.0</td>\n",
              "      <td>5.1</td>\n",
              "      <td>1.8</td>\n",
              "      <td>virginica</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>150 rows × 5 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "     sepal_length  sepal_width  petal_length  petal_width    species\n",
              "0             5.1          3.5           1.4          0.2     setosa\n",
              "1             4.9          3.0           1.4          0.2     setosa\n",
              "2             4.7          3.2           1.3          0.2     setosa\n",
              "3             4.6          3.1           1.5          0.2     setosa\n",
              "4             5.0          3.6           1.4          0.2     setosa\n",
              "..            ...          ...           ...          ...        ...\n",
              "145           6.7          3.0           5.2          2.3  virginica\n",
              "146           6.3          2.5           5.0          1.9  virginica\n",
              "147           6.5          3.0           5.2          2.0  virginica\n",
              "148           6.2          3.4           5.4          2.3  virginica\n",
              "149           5.9          3.0           5.1          1.8  virginica\n",
              "\n",
              "[150 rows x 5 columns]"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import seaborn as sns\n",
        "iris = sns.load_dataset('iris')\n",
        "\n",
        "iris"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xcGKMc9SNDge"
      },
      "source": [
        "iris 数据集是费舍尔（Fisher）于 1936 年推出的小型经典数据集。这是已知最早用于评估分类方法的数据集之一。它包含 4 个特征(sepal_length, sepal_width, petal_length, petal_width)，都为正实数。首先，学习如何找到带有给定标签（花的类型, species）的数据子集。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "id": "sEOgNyIeNdtu"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sepal_length</th>\n",
              "      <th>sepal_width</th>\n",
              "      <th>petal_length</th>\n",
              "      <th>petal_width</th>\n",
              "      <th>species</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>4.9</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>4.7</td>\n",
              "      <td>3.2</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4.6</td>\n",
              "      <td>3.1</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.6</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>5.4</td>\n",
              "      <td>3.9</td>\n",
              "      <td>1.7</td>\n",
              "      <td>0.4</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>4.6</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.3</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>4.4</td>\n",
              "      <td>2.9</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>4.9</td>\n",
              "      <td>3.1</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.1</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>5.4</td>\n",
              "      <td>3.7</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>4.8</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.6</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>4.8</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.1</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>4.3</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.1</td>\n",
              "      <td>0.1</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>5.8</td>\n",
              "      <td>4.0</td>\n",
              "      <td>1.2</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>5.7</td>\n",
              "      <td>4.4</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.4</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>5.4</td>\n",
              "      <td>3.9</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.4</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.3</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>18</th>\n",
              "      <td>5.7</td>\n",
              "      <td>3.8</td>\n",
              "      <td>1.7</td>\n",
              "      <td>0.3</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>19</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.8</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.3</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>20</th>\n",
              "      <td>5.4</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.7</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>21</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.7</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.4</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>22</th>\n",
              "      <td>4.6</td>\n",
              "      <td>3.6</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>23</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.3</td>\n",
              "      <td>1.7</td>\n",
              "      <td>0.5</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>24</th>\n",
              "      <td>4.8</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.9</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.6</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>26</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.6</td>\n",
              "      <td>0.4</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>27</th>\n",
              "      <td>5.2</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>28</th>\n",
              "      <td>5.2</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>29</th>\n",
              "      <td>4.7</td>\n",
              "      <td>3.2</td>\n",
              "      <td>1.6</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>30</th>\n",
              "      <td>4.8</td>\n",
              "      <td>3.1</td>\n",
              "      <td>1.6</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>31</th>\n",
              "      <td>5.4</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.4</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>32</th>\n",
              "      <td>5.2</td>\n",
              "      <td>4.1</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.1</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>33</th>\n",
              "      <td>5.5</td>\n",
              "      <td>4.2</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>34</th>\n",
              "      <td>4.9</td>\n",
              "      <td>3.1</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>35</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.2</td>\n",
              "      <td>1.2</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>36</th>\n",
              "      <td>5.5</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>37</th>\n",
              "      <td>4.9</td>\n",
              "      <td>3.6</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.1</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>38</th>\n",
              "      <td>4.4</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>39</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.4</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>40</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.3</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>41</th>\n",
              "      <td>4.5</td>\n",
              "      <td>2.3</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.3</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>42</th>\n",
              "      <td>4.4</td>\n",
              "      <td>3.2</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>43</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.6</td>\n",
              "      <td>0.6</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>44</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.8</td>\n",
              "      <td>1.9</td>\n",
              "      <td>0.4</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>45</th>\n",
              "      <td>4.8</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.3</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>46</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.8</td>\n",
              "      <td>1.6</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>47</th>\n",
              "      <td>4.6</td>\n",
              "      <td>3.2</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>48</th>\n",
              "      <td>5.3</td>\n",
              "      <td>3.7</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>49</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.3</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>setosa</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "    sepal_length  sepal_width  petal_length  petal_width species\n",
              "0            5.1          3.5           1.4          0.2  setosa\n",
              "1            4.9          3.0           1.4          0.2  setosa\n",
              "2            4.7          3.2           1.3          0.2  setosa\n",
              "3            4.6          3.1           1.5          0.2  setosa\n",
              "4            5.0          3.6           1.4          0.2  setosa\n",
              "5            5.4          3.9           1.7          0.4  setosa\n",
              "6            4.6          3.4           1.4          0.3  setosa\n",
              "7            5.0          3.4           1.5          0.2  setosa\n",
              "8            4.4          2.9           1.4          0.2  setosa\n",
              "9            4.9          3.1           1.5          0.1  setosa\n",
              "10           5.4          3.7           1.5          0.2  setosa\n",
              "11           4.8          3.4           1.6          0.2  setosa\n",
              "12           4.8          3.0           1.4          0.1  setosa\n",
              "13           4.3          3.0           1.1          0.1  setosa\n",
              "14           5.8          4.0           1.2          0.2  setosa\n",
              "15           5.7          4.4           1.5          0.4  setosa\n",
              "16           5.4          3.9           1.3          0.4  setosa\n",
              "17           5.1          3.5           1.4          0.3  setosa\n",
              "18           5.7          3.8           1.7          0.3  setosa\n",
              "19           5.1          3.8           1.5          0.3  setosa\n",
              "20           5.4          3.4           1.7          0.2  setosa\n",
              "21           5.1          3.7           1.5          0.4  setosa\n",
              "22           4.6          3.6           1.0          0.2  setosa\n",
              "23           5.1          3.3           1.7          0.5  setosa\n",
              "24           4.8          3.4           1.9          0.2  setosa\n",
              "25           5.0          3.0           1.6          0.2  setosa\n",
              "26           5.0          3.4           1.6          0.4  setosa\n",
              "27           5.2          3.5           1.5          0.2  setosa\n",
              "28           5.2          3.4           1.4          0.2  setosa\n",
              "29           4.7          3.2           1.6          0.2  setosa\n",
              "30           4.8          3.1           1.6          0.2  setosa\n",
              "31           5.4          3.4           1.5          0.4  setosa\n",
              "32           5.2          4.1           1.5          0.1  setosa\n",
              "33           5.5          4.2           1.4          0.2  setosa\n",
              "34           4.9          3.1           1.5          0.2  setosa\n",
              "35           5.0          3.2           1.2          0.2  setosa\n",
              "36           5.5          3.5           1.3          0.2  setosa\n",
              "37           4.9          3.6           1.4          0.1  setosa\n",
              "38           4.4          3.0           1.3          0.2  setosa\n",
              "39           5.1          3.4           1.5          0.2  setosa\n",
              "40           5.0          3.5           1.3          0.3  setosa\n",
              "41           4.5          2.3           1.3          0.3  setosa\n",
              "42           4.4          3.2           1.3          0.2  setosa\n",
              "43           5.0          3.5           1.6          0.6  setosa\n",
              "44           5.1          3.8           1.9          0.4  setosa\n",
              "45           4.8          3.0           1.4          0.3  setosa\n",
              "46           5.1          3.8           1.6          0.2  setosa\n",
              "47           4.6          3.2           1.4          0.2  setosa\n",
              "48           5.3          3.7           1.5          0.2  setosa\n",
              "49           5.0          3.3           1.4          0.2  setosa"
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "iris.iloc[np.where(iris[\"species\"] == \"setosa\")[0]]"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ivBWrSMQO6f1"
      },
      "source": [
        "**问题 2**: 编写一个函数，接收一个花的类别（“setosa”、“versicolor ”或 “virginica ”中的一种）和一个数字 $n$，并返回该类别中按萼片宽度 (sepal width) 排序的前 n 种花的平均萼片长度，即该类所有花卉中萼片宽度最大的 n 种花的平均萼片长度。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "yl9bbuNTPcBl"
      },
      "outputs": [],
      "source": [
        "def get_mean_sepal_length_from_class_top_n_width(iris, flower_class:str, n:int):\n",
        "    '''\n",
        "    inputs: the iris dataset, a flower_class string and a positive integer\n",
        "    output: a floating point number\n",
        "    using the iris dataset provided above as a pandas DataFrame,\n",
        "    a) obtain only those datapoints which correspond to the given class\n",
        "    b) find the top n of that subset according to sepal width\n",
        "    c) return the mean sepal length of that smaller subset\n",
        "    '''\n",
        "    # STUDENT TODO START:\n",
        "    class_filter = iris[iris['species'] == flower_class]\n",
        "    \n",
        "    sorted_by_width = class_filter.sort_values(by='sepal_width', ascending=False)\n",
        "    \n",
        "    top_n = sorted_by_width.head(n)\n",
        "    \n",
        "    mean_sepal_length = top_n['sepal_length'].mean()\n",
        "    \n",
        "    return mean_sepal_length\n",
        "    # STUDENT TODO END"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OI9SfQ3fRqJ8"
      },
      "source": [
        "学习如何使用这些特征来预测与每个数据点相关的标签（花的类型）。 \n",
        "\n",
        "**问题 3:** 下一项任务是获取 iris 数据集的一个子集，该子集只包含每个物种的前 n 个示例；然后返回修改后子集的副本，该副本的 “物种 (specices) ”列是整数值而不是字符串值。0 表示 “setosa”，1 表示 “versicolor”，2 表示 “virginica”。 “基于整数的分类表示法 ”在许多分类任务和其他涉及与类别为变量的任务中都非常有用。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "AbKmUdYsSRQj"
      },
      "outputs": [],
      "source": [
        "def string_to_categorical_int(iris, n : int):\n",
        "    '''\n",
        "    input: the iris dataset, a positive integer n\n",
        "    output: a new dataframe df2 which contains the same data as df except\n",
        "    a) only the first n examples of each species are retained\n",
        "    b) the species labels are converted from strings to integers between 0 and 2 according to the above scheme\n",
        "    '''\n",
        "    # STUDENT TODO START:\n",
        "    # 创建新的DataFrame用于存储结果\n",
        "    df2 = pd.DataFrame()\n",
        "    \n",
        "    # 物种名称到整数的映射字典\n",
        "    species_to_int = {'setosa': 0, 'versicolor': 1, 'virginica': 2}\n",
        "    \n",
        "    # 遍历每个物种\n",
        "    for species, code in species_to_int.items():\n",
        "        # 筛选出当前物种的数据\n",
        "        species_df = iris[iris['species'] == species]\n",
        "        species_df = species_df.head(n)\n",
        "        \n",
        "        species_df = species_df.copy()  \n",
        "        species_df['species'] = code\n",
        "        # 添加到结果DataFrame\n",
        "        df2 = pd.concat([df2, species_df])\n",
        "    # 重置索引\n",
        "    df2 = df2.reset_index(drop=True)\n",
        "    return df2\n",
        "    # STUDENT TODO END"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "PaTDiSK8oFXm"
      },
      "source": [
        "## Matplotlib\n",
        "\n",
        "**问题 4:**\n",
        "Matplotlib 是一个在学术界和工业界广泛使用的 Python 图形库。使用 Matplotlib，利用Tycho Brahe从 1582 年到 1600 年记录的观测数据，生成火星赤纬[坐标]与时间的散点图（如下所示）。我们提供了启动代码，用于下载数据并将其处理到 Pandas 数据帧中。\n",
        "\n",
        "数据应绘制成散点图，Y 轴为赤纬角，X 轴为自初始观测以来的天数，使用 “+”形标记，每个数据点的透明度为 0.25（查看 “+”形标记）。 25（查看散点图函数的 “alpha ”属性），Tycho Brahe笔记每卷的数据用不同的颜色绘制，并在右下方的图表图例中正确标注（查看 Pandas 中的分类变量过滤，并查看散点图函数的 “label ”属性以设置图例标签）。如图所示，图表应有标题和每个轴的标签，绘制的网格线透明度应为 0.25（查看网格函数的 `alpha` 属性），宽度应为 12 英寸，高度应为 5 英寸（查看 `set_size_inches` 函数）。\n",
        "\n",
        "---\n",
        "\n",
        "![mars_graph.png]()\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "_NR4whx1wSQh"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Volume</th>\n",
              "      <th>Days since 1 AD</th>\n",
              "      <th>Declination</th>\n",
              "      <th>Time Deltas</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>10</td>\n",
              "      <td>578150.500000</td>\n",
              "      <td>23.116667</td>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>10</td>\n",
              "      <td>578198.500000</td>\n",
              "      <td>26.933333</td>\n",
              "      <td>48.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>10</td>\n",
              "      <td>578195.500000</td>\n",
              "      <td>26.372222</td>\n",
              "      <td>45.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>10</td>\n",
              "      <td>578217.500000</td>\n",
              "      <td>27.300000</td>\n",
              "      <td>67.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>10</td>\n",
              "      <td>578883.059722</td>\n",
              "      <td>15.900000</td>\n",
              "      <td>732.559722</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   Volume  Days since 1 AD  Declination  Time Deltas\n",
              "0      10    578150.500000    23.116667     0.000000\n",
              "1      10    578198.500000    26.933333    48.000000\n",
              "2      10    578195.500000    26.372222    45.000000\n",
              "3      10    578217.500000    27.300000    67.000000\n",
              "4      10    578883.059722    15.900000   732.559722"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# load data\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "df = pd.read_excel(\"mars.xls\", usecols=\"F,O,U\", skiprows=5)\n",
        "df['Time Deltas'] = df['Days since 1 AD'] - df['Days since 1 AD'].min()\n",
        "df.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "id": "F264T71IhkLg"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "数据文件的列名: ['Volume', 'Days since 1 AD', 'Declination']\n",
            "   Volume  Days since 1 AD  Declination\n",
            "0      10    578150.500000    23.116667\n",
            "1      10    578198.500000    26.933333\n",
            "2      10    578195.500000    26.372222\n",
            "3      10    578217.500000    27.300000\n",
            "4      10    578883.059722    15.900000\n"
          ]
        },
        {
          "data": {
            "image/png": "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rVq1TBDKCtZp4E4DO99++62sWbNGnnzyyRK/Jvr5o6KiTPDrpZdekmuvvVY++eQTb8BSffnll5Keni6XX365ua0BuBEjRpjH1YCRzi29z+VymfuXLVtmzl9//bV5DXznYWleg1GjRpnXQD+fLrHU1x4AAJQTrSkFAABQUkOHDnVfdtllRd43aNAgd+vWrY/7sbNmzXLXqFHDe3vp0qXu8PBw986dO83tPXv2uCMiItwLFy40t++88053r1693C6X62/HdeDAAa2X6f3YYz366KPudu3aFXgejRs3dufm5nr7Bg4caJ6DWr9+vXm8efPmFfl448ePd/ft27dA3/bt283H6McW5eDBg+b+BQsWePumT5/uTkxMLDDOyMhI9969e719K1asMB+3devWEr8nltTUVPO477zzjrcvOzvbXa9ePfekSZPMbR2Xfp7333+/wOsaGxvrnjlzprl92mmnuceMGVPq16Rnz57u9u3bF7gmJyfHXbNmTfeMGTO8fVdffbX3vSjKvn37zOOuWbPG3N6yZYu5/fPPPx/3tSnJa/D11197r/nss89MX0ZGxnHHAwAAio9MKQAAUO40c8c3M0mzVnr37m2W+Wnmky7lOnDggMmAUbrUTpd/WYXT3377bbNE7+yzz/YuvdJMoZYtW5olV1999dVxP7cWXNfrNetFM3uee+45kzFzIvq5dRc8iy7j05pPSj+v3qeZV0X55ZdfTIaVZglZR6tWrcx9vsvKSkNfA81QsmgGmr6Ounxv4MCB8uqrr5pi5CWhY9JsJ13SaImMjDTvgWZf+erWrVuB11Vff+safR8ee+wx8ziPPvqoyUor6WvSsWPHAp9PM5E0m0oz4aysKF2OqBlUlo0bN5pssWbNmplln1bG3LZt2/zyGujyRd95oay5AQAAyoagFAAAKHf6i71V20eLoGvdH/3lXpdLrVixQl544YVCxa3/+c9/epfM6dI93ZnOCmxpvaotW7bI+PHjJSMjwwQudGnf8ejH67I9Xb42c+ZMOfnkk+XHH3887vUakPCln9daDqa1m05El5pp8EuDV76HBk+soFpp6dJGXxocmzdvnqnZ1aZNG3n++edNoEhfm0DT9+uPP/4wAUZdvqd1l3Q8JXlNjn1+SgNQuixPAz9aV0xff12SaNHH1SV2GpBbunSpOfxZKN13bljz0ZobAACgbAhKAQCAcqX1ojRIMWDAAHNbg1D6S7zW5dFi2Rog2rlzZ6GPu+6660zxbK3btHbtWhk6dGiB+zUrRotgazBCA00a4Dq2/o8vrWf00EMPyeLFi+XUU0+Vd999t1TPR7OSdPyLFi0q8n4NmGmtLM3Y0bpEvkdRQZey0sCIZviMHTtWfv75Z1OT6aOPPjL3advpdJ7w45s3b+6t42TRrCGtG6WBLl++gTzNyNqwYYO0bt3a26eF32+55RZTt+m+++4z701ZXxMNJOrj6nusGVOaEWYFhjS7TutxPfzwwyZjTMdybKaYPjd1otehJK8BAADwH4JSAACg1LTQ9e7du2XHjh2mWPSECRPksssuM5lRWhxcaSBCf+HXLBrNrHnrrbdMUetj6S5uWrRbi2v37dtXGjRoUGD3Pi00/vvvv5vAyKxZs8yuf7671Vk0a0iDUZoppUEuXeqnGTq+wZSS0MCKBsi0wLVm7ujja4FxLbpuFfzW4JguKdOghi4N0+Lcmun1dwGiktKsIH2Ntei2LlfTYNC+ffu8z03HqsvoNHCjO9357iBo0aDQrbfeal5nLUCuAcCbbrrJLKW88cYbC1w7btw4k7WkO+npkkjdBc/awU53zdPnqa+Hvve6XM8aR1lfE92FT+eIZoX5Lt3TOaI77r3yyiumCLwGQLXouS/dTU+zq6zi6ocPHy7TawAAAPyHoBQAACg1/YVe6+xoMESXWGlgQjOdtA6QVaNJ6yBpUEl3Z9OMJc1+mThxYpGPpwEBXYZ17A5nWodq0qRJZolY586dzZLA//3vf2bntWPFxcWZ4JVmamlWlu68p0GSm2++udTPc9q0aWa54G233WZqI2kAQ+sdqXr16pmMGw22aDBNM6s0YKMBs6LGVxaaLaa73V144YXmuWnGkGagXXDBBeZ+HZcu59PXSWtR+WYC+XriiSfM66NL7zSrSQM8GjTSoM+x1919992m9pMGH3VnPN9MJH1dNRCl772O58UXXyyX10QDURoo0hpkvnWf9GPff/99k32nc+nee++Vp556qlBdKp2DukOijkODpGV5DQAAgP84tNq5Hx8fAACg2DSLSgMNurzPCn4AAAAgNEXYPQAAAABdNqU75Gn2imY0EZACAAAIfSzfAwAAttOlebosTutEaT0oAAAAhD6W7wEAAAAAACDgyJQCAAAAAABAwBGUAgAAAAAAQMARlAIAAAAAAEDAEZQCAAAAAABAwBGUAgAAAAAAQMARlAIAAAAAAEDAEZQCAAAAAABAwBGUAgAAAAAAQMARlAIAAAAAAIAE2v8Dz7OpoJ4DA+EAAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 1200x500 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "# STUDENT TODO START:\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "df = pd.read_excel(\"mars.xls\", usecols=\"F,O,U\", skiprows=5)\n",
        "df['Time Deltas'] = df['Days since 1 AD'] - df['Days since 1 AD'].min()\n",
        "plt.figure(figsize=(12, 5))\n",
        "for volume in df['Volume'].unique():\n",
        "    volume_data = df[df['Volume'] == volume]\n",
        "    plt.scatter(volume_data['Time Deltas'], volume_data['Declination'], \n",
        "               marker='+', alpha=0.25, label=f'Volume {volume}')\n",
        "\n",
        "plt.grid(alpha=0.25)\n",
        "\n",
        "plt.title('Mars Declination vs. Time')\n",
        "plt.xlabel('Days since first observation')\n",
        "plt.ylabel('Declination (degrees)')\n",
        "\n",
        "plt.legend(loc='lower right')\n",
        "\n",
        "plt.tight_layout()\n",
        "plt.show()\n",
        "# STUDENT TODO END"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": []
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "display_name": "gpr",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.21"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
